#include <bits/stdc++.h>
using namespace std;

bool vis[50];
vector<int> s;
int color[50];
vector<vector<int>> adj;
long long aa=0LL , ans=1LL;
bool valid(int u,int c)
{
  for(auto x:adj[u])
  {
    if(color[x]==c)return 0;
  }
  return 1;
}

void dfs(int u)
{
  if(vis[u])return;
  s.push_back(u);
  vis[u]=1;
  for(auto x:adj[u])dfs(x);
}

void docolor(int i)
{
  if(i==s.size()){aa++;return;}
  for(int c=1;c<=3;c++)
  {
    if(valid(s[i],c))
    {
      color[s[i]]=c;
      docolor(i+1);
      color[s[i]]=0;
    }
  }
}

int main()
{
  int n,m;cin>>n>>m;
  adj.resize(n);
  for(int i=0;i<m;i++)
  {
    int a,b;cin>>a>>b;
    adj[a-1].push_back(b-1);
    adj[b-1].push_back(a-1);
  }


  for(int i=0;i<n;i++)
  {
    if(!vis[i])
    {
      s.clear();
      dfs(i);
      aa=0;
      docolor(0);
      ans*=aa;
    }
  }
  cout<<ans<<endl;
}
